package pojo.operacional;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import pojo.cadastro.operacional.Fornecedor;
import pojo.cadastro.financeiro.TipoLancamento;

@Entity
@Table(name = "tbf_despesa")
@NamedQueries({
    @NamedQuery(name = "Venda.listAll", query = "SELECT c FROM Compra c ORDER BY c.dataCadastro")
})
public class Compra implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "DES_LON_ID")
    private long id;
    @Column(name = "DES_DTA_CAD", nullable = false)
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dataCadastro;
    @Column(name = "DES_INT_NOTA")
    private int notaFiscal;
    @Column(name = "DES_INT_QTD_PARC")
    private int qtdParcelas;
    @Column(name = "DES_DBL_VALOR", nullable=false)
    private double valor;
    @Column(name = "DES_TXT_OBSERVACAO", length = 150)
    private String observacao;
    @Column(name = "DES_BOOL_CANCELADO")
    private boolean cancelado;
    
    @OneToMany(mappedBy = "compra", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<CompraItem> compraItems;

    @OneToMany(mappedBy = "compra", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    private List<CompraLancamento> compraLancamentos;

    @ManyToOne
    @JoinColumn(name = "TPL_LON_ID", nullable = false, updatable = false)
    private TipoLancamento tipoLancamento;

    @ManyToOne
    @JoinColumn(name = "FOR_LON_ID", nullable = false)
    private Fornecedor fornecedor;

    public Date getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(Date dataCadastro) {
        this.dataCadastro = dataCadastro;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public int getQtdParcelas() {
        return qtdParcelas;
    }

    public void setQtdParcelas(int qtdParcelas) {
        this.qtdParcelas = qtdParcelas;
    }

    public double getValor() {
        return valor;
    }

    public void setValor(double valor) {
        this.valor = valor;
    }

    public TipoLancamento getTipoLancamento() {
        return tipoLancamento;
    }

    public void setTipoLancamento(TipoLancamento tipoLancamento) {
        this.tipoLancamento = tipoLancamento;
    }

    public boolean isCancelado() {
        return cancelado;
    }

    public void setCancelado(boolean cancelado) {
        this.cancelado = cancelado;
    }

    public List<CompraItem> getCompraItems() {
        return compraItems;
    }

    public void setCompraItems(List<CompraItem> compraItems) {
        this.compraItems = compraItems;
    }

    public List<CompraLancamento> getCompraLancamentos() {
        return compraLancamentos;
    }

    public void setCompraLancamentos(List<CompraLancamento> compraLancamentos) {
        this.compraLancamentos = compraLancamentos;
    }

    public Fornecedor getFornecedor() {
        return fornecedor;
    }

    public void setFornecedor(Fornecedor fornecedor) {
        this.fornecedor = fornecedor;
    }

    public int getNotaFiscal() {
        return notaFiscal;
    }

    public void setNotaFiscal(int notaFiscal) {
        this.notaFiscal = notaFiscal;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }
    
}
